

//定时器模块
class Timer{
    /**
     * 倒计时方法
     * @param  number end    截止时间
     * @param  function update 每次更新时间时的回调函数
     * @param  function handle 倒计时结束时的回调函数
     * @return
     */
    countdown(end,update,handle){
            const now=new Date().getTime(); //获取当前时间。Date().getTime()得到的是从1971到现在的毫秒数
        const self=this;
        if(now-end>0){      //倒计时结束
            handle.call(self);
        }else{
            let last_time=end-now;  //倒计时的剩余时间
            //天、时、分、秒的毫秒数
            const px_d=1000*60*60*24;
            const px_h=1000*60*60;
            const px_m=1000*60;
            const px_s=1000;

            //剩余时间：天、时、分、秒
            let d=Math.floor(last_time/px_d);
            let h=Math.floor((last_time-d*px_d)/px_h);
            let m=Math.floor((last_time-d*px_d-h*px_h)/px_m);
            let s=Math.floor((last_time-d*px_d-h*px_h-m*px_m)/px_s);
            let r=[];
            if(d>0){
                r.push(`<em>${d}</em>天`);//使用es6的字符串模板
            }
            if(r.length||(h>0)){    //如果没有天，就不能显示天
                r.push(`<em>${h}</em>时`);
            }
            if(r.length||m>0){
                r.push(`<em>${m}</em>分`);
            }
            if(r.length||s>0){
                r.push(`<em>${s}</em>秒`);
            }
            self.last_time=r.join('');
            update.call(self,r.join(''));  //更新数据,1秒钟轮训一次

            //重新调用倒计时
            setTimeout(function () {
                self.countdown(end,update,handle);  //每秒轮询一次
            }, 1000);
        }
    }
}

export default Timer
